import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

/**
 * La barre de jeu est un menu se trouvant a gauche de l'environnement de jeu.
 * Elle comporte 4 icones qui permettent de :
 * <ul>
 * 			<li>acheter des escargots</li>
 *			<li>acheter des salades</li>
 *          <li>acheter des obstacles</li>
 *          <li>vendre le plus gros escargots</li>
 * </ul>          
 */
public class BarreDeJeu extends JFrame implements ActionListener{

    private int hauteurBarreDeJeu;
    private int largeurBarreDeJeu;
    private int positionBarreDeJeu_x;
    private int positionBarreDeJeu_y; 

    private Dimension dimensionBarreDeJeu = new Dimension(largeurBarreDeJeu, hauteurBarreDeJeu);
  
    private JPanel panelBarreDeJeu = new JPanel();
    private JPanel panelBoutiqueAchatSalade = new JPanel();
    private JPanel panelBoutiqueVenteEscargot = new JPanel();
    private JPanel panelBoutiqueAchatEscargot = new JPanel();
    private JPanel panelBoutiqueAchatObstacle = new JPanel();
    private JPanel panelEchap = new JPanel();

	private MenuJeu menuJeu;
	private Tirelire tirelire = new Tirelire (300);
	private Environnement environnement;
    
    private JLayeredPane ensemble = new JLayeredPane();
	private JButton boutonBoutiqueAchatSalade = new JButton(new ImageIcon("img/AchatSalade.png"));
	private JButton boutonBoutiqueVenteEscargot = new JButton(new ImageIcon("img/VendreEscargot.png"));
	private JButton boutonBoutiqueAchatEscargot = new JButton(new ImageIcon("img/AchatEscargot.png"));
	private JButton boutonBoutiqueAchatObstacle = new JButton(new ImageIcon("img/AchatObstacle.png"));
	private JButton boutonEchap = new JButton(new ImageIcon("img/Echap.png"));

	private BoutiqueAchatEscargot  boutiqueAchatEscargot = new BoutiqueAchatEscargot(this, tirelire);
	private BoutiqueAchatObstacle  boutiqueAchatObstacle= new BoutiqueAchatObstacle(this, tirelire);
	private BoutiqueAchatSalade    boutiqueAchatSalade = new BoutiqueAchatSalade(this, tirelire);
	private BoutiqueVenteEscargot  boutiqueVenteEscargot= new BoutiqueVenteEscargot(this, tirelire);

	
/**
 	* Construction de la barre de jeu.
 	* 
 	* @param x
 	* 			Position de la barre de jeu (coin haut gauche) sur l'axe des abscisses
 	* @param y
 	* 			Position de la barre de jeu sur l'axe des ordonnees
 	* @param largeur
 	* 			Largeur de la barre de jeu
 	* @param hauteur
 	* 			Hauteur de la barre de jeu
 	* @param _env
 	* 			Environnement auquel est attachee la barre de jeu
 	*/
    public BarreDeJeu(int x,int y,int largeur,int hauteur,Environnement _env){

    	this.positionBarreDeJeu_x=x;
    	this.positionBarreDeJeu_y=y;
    	this.largeurBarreDeJeu=largeur;
    	this.hauteurBarreDeJeu=hauteur;
    	this.environnement=_env;
    	this.initBarreJeu();
    	this.boutiqueAchatEscargot.confirmerActionAchatEscargot();
    	this.boutiqueAchatObstacle.confirmerActionAchatObstacle();
    	this.boutiqueAchatSalade.confirmerActionAchatSalade();
    	this.boutiqueVenteEscargot.confirmerActionVenteEscargot();
    }
    
/**
 	* Initialisation de la barre de Jeu.
 	* Positionnement, affichage de chaque bouton.     
 	*/
    
    public void initBarreJeu(){
    
    	this.setUndecorated(true);
    	this.setSize(this.largeurBarreDeJeu,this.hauteurBarreDeJeu);
    	this.setLocation(this.positionBarreDeJeu_x,this.positionBarreDeJeu_y);
    	this.setVisible(true);
    	this.toFront();
    	
    	boutonBoutiqueAchatSalade.setBorderPainted(false);
    	boutonBoutiqueAchatSalade.setOpaque(false);
    	boutonBoutiqueAchatSalade.setContentAreaFilled(false);
    	boutonBoutiqueAchatSalade.addActionListener(this);
    	boutonBoutiqueAchatSalade.setToolTipText("Boutique Achat Salade");//affichage de texte pour le bouton
		panelBoutiqueAchatSalade.setBounds(-225,-10,500,60);
		panelBoutiqueAchatSalade.setOpaque(false);
		panelBoutiqueAchatSalade.add(boutonBoutiqueAchatSalade);
		ensemble.add(panelBoutiqueAchatSalade, new Integer(3));
		
		boutonBoutiqueVenteEscargot.setBorderPainted(false);
		boutonBoutiqueVenteEscargot.setOpaque(false);
		boutonBoutiqueVenteEscargot.setContentAreaFilled(false);
		boutonBoutiqueVenteEscargot.addActionListener(this);
		boutonBoutiqueVenteEscargot.setToolTipText("Boutique Vente Escargot");//affichage de texte pour le bouton
		panelBoutiqueVenteEscargot.setBounds(-225,140,500,60);
		panelBoutiqueVenteEscargot.setOpaque(false);
		panelBoutiqueVenteEscargot.add(boutonBoutiqueVenteEscargot);
		ensemble.add(panelBoutiqueVenteEscargot, new Integer(3));
		
		boutonBoutiqueAchatEscargot.setBorderPainted(false);
		boutonBoutiqueAchatEscargot.setOpaque(false);
		boutonBoutiqueAchatEscargot.setContentAreaFilled(false);
		boutonBoutiqueAchatEscargot.addActionListener(this);
		boutonBoutiqueAchatEscargot.setToolTipText("Boutique Achat Escargot");//affichage de texte pour le bouton
		panelBoutiqueAchatEscargot.setBounds(-225,40,500,60);
		panelBoutiqueAchatEscargot.setOpaque(false);
		panelBoutiqueAchatEscargot.add(boutonBoutiqueAchatEscargot);
		ensemble.add(panelBoutiqueAchatEscargot, new Integer(3));
		
		boutonBoutiqueAchatObstacle.setBorderPainted(false);
		boutonBoutiqueAchatObstacle.addActionListener(this);
		boutonBoutiqueAchatObstacle.setOpaque(false);
		boutonBoutiqueAchatObstacle.setContentAreaFilled(false);
		boutonBoutiqueAchatObstacle.setToolTipText("Boutique Achat Obstacle");//affichage de texte pour le bouton
		panelBoutiqueAchatObstacle.setBounds(-225,90,500,60);
		panelBoutiqueAchatObstacle.setOpaque(false);
		panelBoutiqueAchatObstacle.add(boutonBoutiqueAchatObstacle);
		ensemble.add(panelBoutiqueAchatObstacle, new Integer(3));
    	
		boutonEchap.setBorderPainted(false);
		boutonEchap.setOpaque(false);
		boutonEchap.setContentAreaFilled(false);
		boutonEchap.addActionListener(this);
		boutonEchap.setToolTipText("Echap");//affichage de texte pour le bouton
		panelEchap.setBounds(-225,190,500,60);
		panelEchap.setOpaque(false);
		panelEchap.add(boutonEchap);
		ensemble.add(panelEchap, new Integer(3));
    	
		this.getContentPane().add(ensemble);
		this.setVisible(true);
		
    }
    
    
 /**
  	* Ouverture de la boutique d'achat d'escargot   
  	*/
    public void ouvrirBoutiqueAchatEscargot() {
    	this.boutiqueAchatEscargot.afficherConfirmationAchatEscargot();
    }

/**
 	* Ouverture de la boutique d'achat de salade
 	*/
    public void ouvrirBoutiqueAchatSalade() {
    	this.boutiqueAchatSalade.afficherConfirmerActionAchatSalade();
     }


/**
 	* Ouverture de la boutique de vente d'escargot     
 	*/
    public void ouvrirBoutiqueVenteEscargot() {
    	
    	if(boutiqueAchatEscargot.getNombreEscargot()>1){
    		this.boutiqueVenteEscargot.afficherConfirmerActionVenteEscargot();
    	}
    	
    	else{
    		boutiqueVenteEscargot.messageErreurEscargot();
    	}
    }

/**
 	* Ouverture de la boutique d'achat d'obstacle
 	*/
    public void ouvrirBoutiqueAchatObstacle() {
    	this.boutiqueAchatObstacle.afficherConfimerActionAchatObstacle();
    }
    
/**
 	* Ouverture du menu du jeu (menu 'echap').
 	* Ce menu propose plusieurs options :
 	* 		<li>sauvegarder la partie</li>
 	* 		<li>revenir au menu principal</li>
 	* 		<li>reprendre la partie></li>
 	* 		<li>quitter le jeu</li>    
 	*/ 
    public void ouvrirMenuJeu() {
    	this.menuJeu=new MenuJeu(environnement, this);
    	menuJeu.setVisible(true);
    }

/**
 	* Gestion de la souris    
 	*/
    public void actionPerformed(ActionEvent arg) {
		if (arg.getSource()==boutonBoutiqueAchatSalade){
	        this.ouvrirBoutiqueAchatSalade();
	  	}
		
		if (arg.getSource()==boutonBoutiqueVenteEscargot){
			this.ouvrirBoutiqueVenteEscargot();
	  	}
		
		if (arg.getSource()==boutonBoutiqueAchatEscargot){
			this.ouvrirBoutiqueAchatEscargot();
			  	}
		
		if (arg.getSource()==boutonBoutiqueAchatObstacle){
			this.ouvrirBoutiqueAchatObstacle();
			
	  	}
		
		if (arg.getSource()==boutonEchap){
			this.ouvrirMenuJeu();
	  	}
		
	}

/**
 	* Accesseurs et mutateurs     
 	*/
	public Environnement getEnvironnement() {
		return environnement;
	}

	public Tirelire getTirelire() {
		return tirelire;
	}

	public void setTirelire(Tirelire tirelire) {
		this.tirelire = tirelire;
	}

	public BoutiqueAchatEscargot getBoutiqueAchatEscargot() {
		return boutiqueAchatEscargot;
	}

	public BoutiqueAchatObstacle getBoutiqueAchatObstacle() {
		return boutiqueAchatObstacle;
	}

	public BoutiqueAchatSalade getBoutiqueAchatSalade() {
		return boutiqueAchatSalade;
	}

	public BoutiqueVenteEscargot getBoutiqueVenteEscargot() {
		return boutiqueVenteEscargot;
	}

}
